/*给定一个最大容量为 M 的堆栈，将 N 个数字按 1, 2, 3, ..., N 的顺序入栈，允许按任何顺序出栈，则哪些数字序列是不可能得到的？例如给定 M=5、N=7，则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 }，但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。

输入格式：
输入第一行给出 3 个不超过 1000 的正整数：M（堆栈最大容量）、N（入栈元素个数）、K（待检查的出栈序列个数）。最后 K 行，每行给出 N 个数字的出栈序列。所有同行数字以空格间隔。

输出格式：
对每一行出栈序列，如果其的确是有可能得到的合法序列，就在一行中输出YES，否则输出NO。

输入样例：
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2
输出样例：
YES
NO
NO
YES
NO*/

/*#include <iostream>
#include <stack>
#include <cassert>
using namespace std;
int a[1024];

int main()
{
    int m, n, k;
    cin >> m >> n >> k;
    bool Flag[k];
    while (k--)
    {
        stack<int> s;
        for (int i = 1; i <= n; ++i)
        {
           cin>>a [i];
        }
        bool flag = true;
        int p = 1;
        int count = 1;
        for (int i = 1; i <= n; ++i)
        {
            s.push(i);
            if (s.size() > m)
            {
                flag = false;
                break;
            }
            while (!s.empty() && s.top() == a[p])//栈非空且出栈数字和top一不一样
            {
                s.pop();
                ++p;//数组下一个就是要出栈的
            }
            flag = (p == n + 1);
            Flag[count] = flag;
            count++;
        }
        
    }
    for (int i = 1; i < k + 1;i++){
        if (Flag[i])
            cout << "YES";
        else
            cout << "NO";
    }
    return 0;
}*/
#include <iostream>
#include <stack>
#include <vector>
#include <string>

using namespace std;

int main()
{
    int m, n, k;
    cin >> m >> n >> k;

    vector<string> results; // 用于存储结果

    while (k--)
    {
        vector<int> a(n);
        for (int i = 0; i < n; ++i)
        {
            cin >> a[i];
        }

        stack<int> s;
        int p = 0;            // 当前检查的出栈序列的位置
        bool possible = true; // 用于标记序列是否可能

        for (int i = 1; i <= n; ++i)
        {              // 入栈元素从 1 到 N
            s.push(i); // 将数字入栈

            // 检查栈顶是否与出栈序列的当前元素相同
            while (!s.empty() && s.top() == a[p])
            {
                s.pop(); // 如果相同则出栈
                p++;     // 移动到出栈序列的下一个位置
            }

            // 如果栈的大小超过最大容量，则标记为不可能
            if (s.size() > m)
            {
                possible = false;
                break;
            }
        }

        // 检查是否已经顺利遍历整个出栈序列
        if (possible && p == n)
        {
            results.push_back("YES"); // 记录结果为 "YES"
        }
        else
        {
            results.push_back("NO"); // 记录结果为 "NO"
        }
    }

    // 一次性输出所有结果
    for (const auto &result : results)
    {
        cout << result << endl; // 输出每个结果
    }

    return 0;
}